package Day07;
import java.util.Arrays;
import java.util.Scanner;
public class AtmDemo {
    public static void main(String[] args) {
        // Atm : 面向过程
        // Atm : 面向对象
        /**
         * 第一层菜单:
         * 1. 登陆
         * 2. 开卡
         * 3. 退出
         */
        // 定义一个初始化用户的数组
        String[][] users = {
                // 用户名    密码     卡号     余额     激活状态
                {"admin", "admin", "1000", "10000", "是"},
                {"三土", "123123", "1001", "10", "是"}
        };
        // 维护一个int类型的卡号
        int cardNum = 1001;
        // 定义接收用户输入的对象
        Scanner scanner = new Scanner(System.in);
        // 初始化的变量
        String choose, regName, regPwd, loginName, loginPwd, jhName, jhCard, inputMoney, inputCard, transName;
        boolean loginNameRight = false;
        boolean isAdmin = false;
        String[] loginUser = new String[5];
        // 准备一个死循环
        begin:while(true) {
            System.out.println("欢迎使用GXA银行ATM系统:");
            System.out.println("请输入如下选择:");
            System.out.println("1. 登陆");
            System.out.println("2. 开卡");
            System.out.println("3. 退出");
            // 初始化管理员状态
            isAdmin = false;
            choose = scanner.next();
            // choose = null => 空指针异常
            //if (choose.equals("1")) {
            if ("1".equals(choose)) {
                login:while(true) {
                    // 登陆
                    System.out.println("请输入用户名:");
                    loginName = scanner.next();
                    // 判断用户名是否存在
                    for(String[] user : users) {
                        if (user[0].equals(loginName)) {
                            loginNameRight = true;
                            // 登陆的用户 => 把内存地址赋值给loginUser
                            loginUser = user;
                        }
                    }
                    if (!loginNameRight) {
                        System.out.println("没有这个用户!请重新输入!");
                        continue login;
                    }
                    System.out.println("请输入用户密码:");
                    loginPwd = scanner.next();
                    // 遍历判断用户名和密码是否一致
                    if (!loginUser[1].equals(loginPwd)) {
                        System.out.println("密码搞错了!请重新登陆!");
                        continue login;
                    }
                    // 激活状态的判断
                    if(loginUser[4].equals("否")) {
                        System.out.println("请联系管理员,激活账户!");
                        continue login;
                    }
                    // 判断是否是超级管理员
                    if ("admin".equals(loginName)) {
                        isAdmin = true;
                    }
                    System.out.println("登陆成功!"+(isAdmin ? "超级管理员欢迎您!" : "用户"+loginName+"欢迎您!"));
                    break login;
                }
                // 超级管理员 和 普通用户
                if(isAdmin) {
                    // 超级管理员
                    admin:while(true) {
                        System.out.println("1. 查看所有用户");
                        System.out.println("2. 查看需要激活的用户");
                        System.out.println("3. 激活用户");
                        System.out.println("4. 冻结用户");
                        System.out.println("5. 退出");
                        choose = scanner.next();
                        switch (choose) {
                            case "1":
                                // 查看所有的用户
                                System.out.println("用户名\t卡号\t余额\t激活状态");
                                for(String[] user : users) {
                                    System.out.println(user[0]+"\t"+user[2]+"\t"+user[3]+"\t"+user[4]);
                                }
                                break;
                            case "2":
                                // 查看所有需要激活的用户
                                System.out.println("用户名\t卡号\t余额\t激活状态");
                                for(String[] user : users) {
                                    if(user[4].equals("是")) {
                                        continue;
                                    }
                                    System.out.println(user[0]+"\t"+user[2]+"\t"+user[3]+"\t"+user[4]);
                                }
                                break;
                            case "3":
                                // 激活用户
                                System.out.println("请输入需要激活的用户名:");
                                jhName = scanner.next();
                                System.out.println("请输入需要激活的用户卡号:");
                                jhCard = scanner.next();
                                for(String[] user: users) {
                                    if(user[0].equals(jhName) && user[2].equals(jhCard)) {
                                        if(user[4].equals("是")) {
                                            System.out.println("账号已经是激活状态! 不能多次激活!");
                                            continue admin;
                                        }
                                        // 说明该用户存在
                                        user[4] = "是";
                                        System.out.println("激活成功!");
                                        continue admin;
                                    }
                                }
                                System.out.println("对不起, 输入的信息有无, 请检查!");
                                break;
                            case "4":
                                // 冻结账户
                                System.out.println("请输入需要冻结的用户名:");
                                jhName = scanner.next();
                                if ("admin".equals(jhName)) {
                                    System.out.println("对不对, 你冻结的是上帝!不能冻结!");
                                    continue admin;
                                }
                                System.out.println("请输入需要冻结的用户卡号:");
                                jhCard = scanner.next();
                                for(String[] user: users) {
                                    if(user[0].equals(jhName) && user[2].equals(jhCard)) {
                                        // 说明该用户存在
                                        user[4] = "否";
                                        System.out.println("冻结成功!");
                                        continue admin;
                                    }
                                }
                                System.out.println("对不起, 输入的信息有误! 请检查!");
                                break;
                            case "5":
                                continue begin;
                            default:
                                System.out.println("选择有错误! 重新选择!");
                                break;
                        }
                    }

                }else {
                    // 普通用户
                    user:while(true) {
                        System.out.println("1. 查看余额");
                        System.out.println("2. 存钱");
                        System.out.println("3. 转账");
                        System.out.println("4. 查看个人信息");
                        System.out.println("5. 退出");
                        choose = scanner.next();
                        switch (choose) {
                            case "1":
                                // 查看余额
                                System.out.println("你的余额:"+loginUser[3]);
                                break;
                            case "2":
                                // 存钱
                                System.out.println("请输入存放的金额:");
                                inputMoney = scanner.next();
                                int money = Integer.valueOf(loginUser[3]);
                                money += Integer.valueOf(inputMoney);
                                loginUser[3] = String.valueOf(money);
                                System.out.println("存钱成功!");
                                break;
                            case "3":
                                // 转账
                                System.out.println("请输入对方的卡号:");
                                inputCard = scanner.next();
                                System.out.println("请输入持卡人的名字:");
                                transName = scanner.next();
                                for(String[] user: users) {
                                    if(user[2].equals(inputCard) && user[0].equals(transName)) {
                                        // 有这个用户了
                                        System.out.println("请输入转账金额:");
                                        inputMoney = scanner.next();
                                        // 判断余额是否充足
                                        if(Integer.valueOf(loginUser[3]) < Integer.valueOf(inputMoney)) {
                                            // 余额不足
                                            System.out.println("你娃太穷了, 去找富婆!! 少奋斗30年!");
                                            continue user;
                                        }
                                        // 转账
                                        // 减自己的金额
                                        loginUser[3] = String.valueOf(Integer.valueOf(loginUser[3])-Integer.valueOf(inputMoney));
                                        // 加对方的
                                        user[3] = String.valueOf(Integer.valueOf(user[3])+Integer.valueOf(inputMoney));
                                        System.out.println("转账成功!!!");
                                        continue user;
                                    }
                                }
                                System.out.println("输入的信息有误, 请检查!");
                                break;
                            case "4":
                                // 查看个人信息
                                System.out.println("用户名\t密码\t卡号\t余额\t激活状态");
                                System.out.println(loginUser[0]+"\t"+loginUser[1]+"\t"+loginUser[2]+"\t"+loginUser[3]+"\t"+loginUser[4]);
                                break;
                            case "5":
                                continue begin;

                            default:
                                System.out.println("选择有错误! 重新选择!");
                                break;
                        }


                    }

                }

            }else if ("2".equals(choose)) {
                // 开卡
                reg:while(true) {
                    System.out.println("请输入用户名:");
                    regName = scanner.next();
                    // 判断该用户名是否存在该系统中
                    // foreach
                    for(String[] user : users) {
                        if (user[0].equals(regName)) {
                            System.out.println("对不起!该用户已存在!请再次输入!");
                            continue reg;
                        }
                    }
                    System.out.println("请输入用户密码:");
                    regPwd = scanner.next();
                    // 自动生成一个 卡号  1000, 1001, 1002.....
                    cardNum++;
                    // 扩容
                    users = Arrays.copyOf(users, users.length+1);
                    String[] newUser = {regName, regPwd, cardNum+"", "20", "否"};
                    users[users.length-1] = newUser;
                    System.out.println("开卡成功!需要管理员激活才能使用!");
                    // 调试
					/*for(String[] user : users) {
						System.out.println(Arrays.toString(user));
					}*/
                    continue begin;
                }

            }else if ("3".equals(choose)) {
                System.out.println("欢迎再次使用GXA银行ATM系统!");
                break;
            }else {
                System.out.println("选择错误, 请重新选择!!!");
            }
        }
    }
}
